package co.edu.udea.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * Configura y provee aceso a las sesiones de Hibernata
 */
public class HibernateSessionFactory {
	
	public static HibernateSessionFactory instance;
	private static SessionFactory sessionFactory;
	private Session session = null;
	private static Configuration configuration = new Configuration();
	
	public static HibernateSessionFactory getInstance(){
		if( instance == null )
			instance = new HibernateSessionFactory();
		return instance;
	}
	/**
	 * Entrega una nueva session de Hibernate
	 * @return
	 */
	public Session getSession(){
		if (sessionFactory == null) {
			rebuildSessionFactory();
			session = null;
		}
		//Si la sesion no se ha iniciado entrega una nueva
		// si ya se habia iniciado entrega la actual
		if(session == null || !session.isOpen())
			return sessionFactory.openSession();
		else
			return sessionFactory.getCurrentSession();
			
	}
	
	/**
	 * Construye la factoria de sesiones con el archvio de configuraci�n de Hibernate dado
	 */
	public static void rebuildSessionFactory() {
		try {
			configuration.configure("co/edu/udea/cfg/hibernate.cfg.xml");
			
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			
			e.printStackTrace();
		}
	}

}